#ifndef __WN_UART_H
#define __WN_UART_H
#include <rtthread.h>
#include <rtdevice.h>
typedef struct serial_t
{
    rt_device_t serialdev;                                   /* 串口标识符 */
    struct serial_configure conf;
    rt_uint32_t baudrate;                                /* 波特率 */
    rt_uint8_t serialName[32];       /* 串口地址 */
    struct rt_semaphore rx_sem;

}serial_t;



/* @brief        打开串口，并进行配置。
 */
rt_uint8_t serial_open(serial_t *serial);

/* @brief        关闭串口.并还原串口参数。
 * @param[in]    serial 为SERIAL_INFO_T结构体，存储了串口的一些配置信息
 * @param[out]   无
 * return        SERIAL_ERROR_OK                       清除成功
 *               SERIAL_ERROR_INVALID_PARAMETER_VALUE  参数不合法
 *               SERIAL_ERROR_CLEAR_ALL_IO_DATA_ERR    串口数据清除失败
 *               SERIAL_ERROR_CONFIG_ERR               串口参数还原失败
 */
rt_uint8_t serial_close(serial_t *serial);

/* @brief        发送函数
 * @param[in]    serial 为SERIAL_INFO_T结构体，存储了串口的一些配置信息
 * @param[in]    sendBuf 要发送的字符串指针
 * @param[in]    sendBufLen 为发送字符串的大小
 * @param[out]   无
 * return        大于0 为最终发送的字节数
 *               SERIAL_ERROR_CONFIG_ERR               参数为 NULL 或 为负
 *               SERIAL_ERROR_SEND_ERR                 数据发送失败（或发送数据大小不匹配）
 */
rt_uint8_t serial_send(serial_t *serial, rt_uint8_t *sendBuf, uint32_t sendBufLen);

/* @brief        接收函数
 * @param[in]    fd 串口文件描述符
 * @param[in]    recvBuf 要发送的字符串指针
 * @param[in]    recvBufLen 为发送字符串的大小
 * @param[in]    timeout为要等待的ms数，如果为0 则无限等待
 * @param[out]   sendBufLen : 发送buf
 * return        大于0 接收到的数据的大小
 *               SERIAL_ERROR_TIMEOUT                  等待超时
 *               SERIAL_ERROR_TIMEOUT                  参数为 NULL 或 为负
 *               SERIAL_ERROR_SELECT_ERR               select接收失败
 *               SERIAL_ERROR_RECV_ERR                 read函数接收失败
 *               SERIAL_ERROR_OVERSTEP_BUF_SIZE        超出缓冲区大小
 */
rt_uint8_t serial_recv(serial_t *serial, rt_uint8_t *recvBuf, uint32_t recvBufLen, uint32_t timeout, uint32_t tryOneDelayMs,uint32_t *sendBufLen);

#endif
